//
// Created by ls on 23-12-23.
//
#include <iostream>
#include <vector>

void printVector(std::vector<int> &v)
{
  for (const auto &it : v) {
    std::cout << it << " ";
  }
  std::cout << std::endl;
}

// 1.vector 容器互换
void test01()
{
  std::vector<int> v1;
  v1.reserve( 10);
  for (int i = 0; i < 10; i++) {
    v1.push_back(i);
  }
  printVector(v1);

  std::vector<int> v2;
  v2.reserve( 10);
  for (int i = 10; i > 0; i--) {
    v2.push_back(i);
  }
  printVector(v2);

  std::cout << "交换后" << std::endl;
  v1.swap(v2);
  printVector(v1);
  printVector(v2);
}

// 2.实际用途
// 巧用 swap 可以收缩内存空间
void test02()
{
  std::vector<int> v;
  v.reserve(100000);
  for (int i = 0; i < 100000; i++) {
    v.push_back(i);
  }

  std::cout << "v 的容量为：" << v.capacity() << std::endl;
  std::cout << "v 的大小为：" << v.size() << std::endl;

  v.resize(3); // 重新指定大小
  std::cout << "v 的容量为：" << v.capacity() << std::endl;
  std::cout << "v 的大小为：" << v.size() << std::endl;

  // 巧用 swap 收缩内存 // c++11 后 被 shrink_to_fit 方法所替代
  // std::vector<int> (v).swap(v);
  v.shrink_to_fit();
  std::cout << "v 的容量为：" << v.capacity() << std::endl;
  std::cout << "v 的大小为：" << v.size() << std::endl;
}

int main()
{
  // test01();
  test02();
  return 0;
}
